草庐IT

Java getNodeName 和命名空间

全部标签

C++:包含来自不同命名空间的多个具有相同名称的头文件

如何解决通过包含一个与另一个头文件同名的头文件而创建的问题,该头文件已间接包含在另一个包含的结果中?例如://src/blah/a.hpp#ifndefA_HPP#defineA_HPPnamspaceblah{classA{}}#endif//src/blah/b.hpp#ifndefB_HPP#defineB_HPP#includes"a.hpp"namspaceblah{classB{}}#endif//src/foo/a.hpp#ifndefA_HPP#defineA_HPPnamspacefoo{classA{}}#endif//src/foo/c.hpp#ifndefC_H

C++ 使用命名空间语句

namespaceMyNamespace{staticvoidfoo1(){}}usingnamespaceMyNamespace;classMyClass{voidfoo2(){::foo1();}};范围解析操作::表示使用全局命名空间中的方法。这里我们可以使用::foo1()。这意味着方法foo1()在全局命名空间中,对吗?我的问题是,使用命名空间ANAMESPACE_NAME是否意味着我们将命名空间ANAMESPACE_NAME中的所有元素导入全局命名空间? 最佳答案 没有。“使用命名空间ANAMESPACE_NAME”意味

c++ - 解析其他命名集的多个命名集

所以我想用boost::spirit::qi写一个……好吧……不那么简单的解析器。我知道boostspirit的基本知识,在过去的几个小时里第一次熟悉它。基本上我需要解析这个:#comment#othercommentset"MysetA"{figure"AF1"{i000i125i111f3.145.115.3i315f1.12.335.166}figure"AF2"{i2551i313}}#commentset"MysetB"{figure"BF1"{f23.14.35.11}}set"MysetC"{include"MysetA"#includesallfiguresfromMy

c++ - extern 在命名空间中如何工作?

我正在运行一个类似于我发现的简单程序here.它旨在减少在多个文件中包含常量时的代码膨胀。它通过在命名空间中使用const全局变量及其各自的extern前向声明来实现这一点。globals.h#ifndefGLOBALS_H_#defineGLOBALS_H_namespaceConstants{//forwarddeclarationsonlyexternconstdoublepi;externconstdoubleavogadro;externconstdoublemy_gravity;}#endif全局变量.cppnamespaceConstants{//actualglobal

c++ - 我应该将 "using namespace"放在 C++ 中的命名空间内部还是外部

我的导师在代码审查中这样修改了我的代码:usingnamespaceA;//definedinotherfilesnamespaceB{//dosomething}而不是像这样:namespaceB{usingnamespaceA;//dosomething}将using命名空间放在命名空间之外是否有任何技术原因? 最佳答案 在头文件中,您不应该在全局范围内使用usingnamespaceN;指令。它将在所有客户端代码上强制使用来自N的大量标识符。但是将它放在命名空间X中也可以。请记住,执行usingnamespaceX;的客户端代

c++ - 是否可以将函数声明放在未命名的命名空间中?

我有一个包含一组函数的文件。对于其中一个函数,我想编写一个辅助函数,它基本上采用char*并跳过所有空格。我认为应该这样做:namespace{constintkNotFound=-1;voidSkipWhitespace(constchar*s);//forwarddeclaration-doesn'tseemtowork?}voidfoo(constchar*s1,constchar*s2){//dosomestuffSkipWhitespace(s1);SkipWhitespace(s2);//continuewithotherstuff}voidSkipWhitespace(c

c++ - 用于 C/C++ 剽窃检测的变量重命名

我有几个简单的C++家庭作业,我知道学生共享代码。这些都是聪明的学生,他们知道如何欺骗莫斯。我正在寻找一种可以根据变量类型重命名变量的工具(第一个int类型的变量将是int1,第一个int数组将是intptr1...),或者做一些我现在想不到的类似事情。你知道一个快速的方法吗?编辑:我需要使用moss并报告90%匹配谢谢 最佳答案 是的,您正在寻找的工具称为编译器。:)说真的,如果提交的程序除了标识符名称外完全相同,那么编译(没有调试信息)应该会产生完全相同的输出。p>如果您在打开调试的情况下执行此操作,编译器可能会在可执行文件中留

c++ - 隐藏模板化辅助函数 - 静态成员或未命名的命名空间

我正在尝试编写一个库,其中包含一些模板化函数,其中一些是辅助函数,因此我不希望我的用户访问它们。一些基本代码可能是//mylib.hnamespacemyfuncs{templatevoidhelper(Tinput,intextrainformation){//dosomeusefullthings}templatevoiddostuff(Tinput){intsomeinfo=4;helper(input,someinfo);}}是否可以通过某种方式隐藏辅助函数,使库的用户无法直接调用它?我原以为未命名的命名空间可能会完成这项工作,但因为我使用的是模板,所以我无法在头文件和实现文件

c++ - 为什么我应该在使用命名空间 std 之后包含头文件 <iostream>?

既然命名空间std已经有了包含函数定义的C++库(如果我是对的),那我们为什么还要在它上面包含头文件??。由于命名空间std包含C++标准库,我看不出有理由单独包含它的声明。 最佳答案 当你做#include它会导致一组类和其他内容包含在您的源文件中。对于iostream和大多数标准库头文件,它们将这些东西放在名为std的命名空间中。.所以#include的代码看起来像这样:namespacestd{classcin{...};classcout{...};classcerr{...};classclog{...};...}所以此时

c++ - 为什么 gcc 会在全局命名空间中隐藏重载函数?

voidf(){}namespacetest{voidf(int){}voidg(){f();}//erroringcc6.2.0}intmain(){test::g();}用g++-std=c++1zmain.cpp编译,输出如下:main.cpp:Infunction'voidtest::g()':main.cpp:9:4:error:toofewargumentstofunction'voidtest::f(int)'f();//erroringcc^main.cpp:5:6:note:declaredherevoidf(int){}我的编译器是gcc6.2.0。为什么gcc会在